#ifndef _THREAD_POOL_H_
#define _THREAD_POOL_H_

#include <pthread.h>

//任务
struct Task_t
{
    //回调函数
    void *(*function)(void *arg);
    //回调函数参数
    void *arg;
};


class ThreadPool
{
private:
public:
    //构造函数
    ThreadPool(int minThread,int maxThread,int maxQueueCapacity);
public:
    //添加任务
    void addTask( void *(*function)(void *arg), void *arg);
public:
    //队列的容量
    int m_queueCapacity;
    //任务队列
    Task_t *m_queue;
    //任务队列的元素个数
    int m_queueSize;
    //任务队列的队头
    int m_queueFront;
    //任务队列的队尾
    int m_queueRear;
    //工作线程
    pthread_t * m_threadIds;
    //管理者线程
    pthread_t m_managerId;

    //最小的线程数
    int m_minThreads;
    //最大的线程数
    int m_maxThreads;
    //忙碌的线程数量
    int m_busyThreads;
    //存活线程数
    int m_aliveThreads;

    //锁
    pthread_mutex_t m_lock;
    //忙线程的锁
    pthread_mutex_t m_busyLock;


    //条件变量
    pthread_cond_t m_notempty;

    

    //条件变量
    pthread_cond_t m_notfull;

    //要删除的线程数量
    int m_exitNum;

};





#endif